package com.yanggu.scala.chapater09.implicitClass

//在scala2.10后提供了隐式类, 可以使用implicit声明类, 隐式类非常强大, 同样可以拓展类的功能
//比前面使用隐式转换函数使用上更加方便, 在集合中隐式类会发挥重要的作用
object ImplicitClassDemo {

  def main(args: Array[String]): Unit = {
    //使用implicit关键字修饰类
    //隐式类不能是顶级的class, 必须定义在其他顶级类中
    //类的主构造方法就是要增强的类, 且只能是一个参数, 一般也是转换前的类型
    //隐式类不能是case class
    implicit class DB1(var mySQL1: MySQL1) {
      def addSuffix(): String = {
        mySQL1.hashCode() + " scala"
      }
    }

    val mySQL = new MySQL1
    mySQL.sayOk()
    println(mySQL.addSuffix())
  }

}

class MySQL1 {

  def sayOk(): Unit = {
    println("sayOk")
  }
}
